// js 不校验函数入参类型
// js 不校验函数入参数量
// js 不校验函数入参顺序
// js 函数定义不指定参数的类型
// 函数调用时，未传入的参数，值会被设置为 undefined
// ES6 允许函数参数有默认值

// 函数剩余参数
{
  function sum(a, b, ...args) {
    let sum = 0;
    for (let arg of args) sum += arg;
    return sum;
  }

  let x = sum(1, 1, 1, 2, 3, 4);
  console.log(x);
}

// 参数对象：js 函数有一个内置的对象，称为参数对象（调用函数时使用的参数数组）
{
  function findMax() {
    let max = -Infinity;
    for (let i = 0; i < arguments.length; i++) {
      const value = arguments[i];
      if (value > max) {
        max = value;
      }
    }
    return max;
  }

  console.log(findMax(1, 123, 500, 115, 44, 88));
}

// 基础数据类型的入参是值传递，改变参数值不会影响原始值。
// 对象是通过引用传递的，改变对象属性，会影响原始值
